#include<iostream>
#include<vector>
#include<queue>
using namespace std;

// using pii = pair<int, int>;
// const int N = 1510;
// int n, m;
// queue<int> q;
// vector<pii> edges[N];
// int in[N], f[N];
// int main()
// {
//     cin >> n >> m;
//     for (int i = 1; i <= m; i++)
//     {
//         int u, v, w;
//         cin >> u >> v >> w;
//         edges[u].emplace_back(v, w);
//         in[v]++;
//         f[i] = -1e9;
//     }

//     // 开口赖在这自谦还是要处理一下入度为0的值
//     //  在这个时候，他们会影响到正常那个路径下的入度
//     for (int i = 2; i <= n; i++)
//     {
//         if (in[i] == 0) q.emplace(i);
//     }
//     while (q.size())
//     {
//         auto t = q.front(); q.pop();
//         for (auto& z : edges[t])
//         {
//             int x = z.first, y = z.second;
//             if ((--in[x]) == 0) q.emplace(x);
//             // f[x] = max(f[x], f[t] + 1);
//         }
//     }
//     f[1] = 0;
//     q.emplace(1);
//     while (q.size())
//     {
//         auto t = q.front(); q.pop();
//         for (auto& z : edges[t])
//         {
//             int x = z.first, y = z.second;
//             if ((--in[x]) == 0) q.emplace(x);
//             f[x] = max(f[x], f[t] + y);
//         }
//     }

//     if (f[n] == -1e9) cout << -1 << endl;
//     else cout << f[n] << endl;
//     return 0;
// }

#include <cstring>
using namespace std;
typedef pair<int, int> PII;
const int N = 1510;
int n, m;
vector<PII> edges[N];
int in[N];
int f[N];
int main()
{
    cin >> n >> m;
    for(int i = 1; i <= m; i++)
    {
        int u, v, w; cin >> u >> v >> w;
        edges[u].push_back({v, w});
        in[v]++;
    }
    queue<int> q;
    // 先处理入度为 0，但是不是 1 号结点的结点     
    for(int i = 2; i <= n; i++)
    {
        if(in[i] == 0) q.push(i);
        f[i] = -1e9; // -0x3f3f3f3f
    }
    // memset(f, -0x3f, sizeof f);
    // f[1] = 0;
    while(q.size())
    {
        auto u = q.front(); q.pop();
        for(auto& t : edges[u])
        {
            int v = t.first;
            in[v]--;
            if(in[v] == 0) q.push(v);
        }
    }
    q.push(1);
    while(q.size())
    {
        auto u = q.front(); q.pop();
        for(auto& t : edges[u])
        {
            int v = t.first, w = t.second;
            f[v] = max(f[v], f[u] + w);
            in[v]--;
            if(in[v] == 0) q.push(v);
        }
    }
    if(f[n] == -1e9) cout << -1 << endl;
    else cout << f[n] << endl;
    return 0;
}
